home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Systemmonitors / Snoopy / snoopydebug.i < prev    next >
Text File  |  1996-09-26  |  4KB  |  163 lines

  1.         IFND    SNOOPDEBUG_I
  2. SNOOPYDEBUG_I    EQU    1
  3.  
  4. ;--------------    this is a very large macro that is called twice to read in the
  5. ;--------------    registers. It is as large as it is because it has to deal with
  6. ;--------------    register indirect stuff, which looks rather strange -> but it works!
  7. SAVEREGS    MACRO    ;\1=target,\2=MODE
  8.         move.l    D0,\1+sregs_D0(a6)
  9.         move.l    D1,\1+sregs_D1(a6)
  10.         move.l    D2,\1+sregs_D2(a6)
  11.         move.l    D3,\1+sregs_D3(a6)
  12.         move.l    D4,\1+sregs_D4(a6)
  13.         move.l    D5,\1+sregs_D5(a6)
  14.         move.l    D6,\1+sregs_D6(a6)
  15.         move.l    D7,\1+sregs_D7(a6)
  16.         move.l    A0,\1+sregs_A0(a6)
  17.         move.l    A1,\1+sregs_A1(a6)
  18.         move.l    A2,\1+sregs_A2(a6)
  19.         move.l    A3,\1+sregs_A3(a6)
  20.         move.l    A4,\1+sregs_A4(a6)
  21.         move.l    A5,\1+sregs_A5(a6)
  22.  
  23.         move.l    4(sp),\1+sregs_A6(a6)
  24.         move.l    sp,\1+sregs_A7(a6)
  25.         addq.l    #8,\1+sregs_A7(a6)
  26.  
  27. ;--------------    NEW: to no longer cause enforcer-hits I test the memory via 
  28. ;--------------    exec/TypeOfMem(); this takes (considerably) longer but hey
  29. ;--------------    you asked for it!
  30.         movem.l    d0-d7/a0-a6,-(sp)
  31.         movea.l    a6,a5
  32.         movea.l    4.w,a6
  33.         movea.l    \1+sregs_A0(a5),a1
  34.         bsr.s    .READINDIRECT
  35.         move.l    d0,\1+sregs_I0(a5)
  36.         movea.l    \1+sregs_A1(a5),a1
  37.         bsr.s    .READINDIRECT
  38.         move.l    d0,\1+sregs_I1(a5)
  39.         movea.l    \1+sregs_A2(a5),a1
  40.         bsr.s    .READINDIRECT
  41.         move.l    d0,\1+sregs_I2(a5)
  42.         movea.l    \1+sregs_A3(a5),a1
  43.         bsr.s    .READINDIRECT
  44.         move.l    d0,\1+sregs_I3(a5)
  45.         movea.l    \1+sregs_A4(a5),a1
  46.         bsr.s    .READINDIRECT
  47.         move.l    d0,\1+sregs_I4(a5)
  48.         movea.l    \1+sregs_A5(a5),a1
  49.         bsr.s    .READINDIRECT
  50.         move.l    d0,\1+sregs_I5(a5)
  51.         bra.s    .DONEREADING
  52.  
  53. .READINDIRECT    move.l    a1,-(sp)
  54.         jsr    -534(a6)    ; TypeOfMem()
  55.         movea.l    (sp)+,a1
  56.         tst.l    d0
  57.         beq.s    .SKIPREADING
  58.         move.l    a1,d0
  59.         bclr    #0,d0
  60.         movea.l    d0,a1
  61.         move.l    (a1),d0
  62. .SKIPREADING    rts
  63.  
  64. .DONEREADING    movem.l    (sp)+,d0-d7/a0-a6
  65.         move.l    a0,-(sp)
  66.         movea.l    8(sp),a0
  67.         move.l    (a0),\1+sregs_I6(a6)
  68.         movea.l    (sp)+,a0
  69.         move.l    8(sp),\1+sregs_I7(a6)
  70.         ENDM
  71.  
  72. ;--------------    the register structure
  73.         STRUCTURE SnoopyRegisters,0
  74.         ULONG    sregs_D0
  75.         ULONG    sregs_D1
  76.         ULONG    sregs_D2
  77.         ULONG    sregs_D3
  78.         ULONG    sregs_D4
  79.         ULONG    sregs_D5
  80.         ULONG    sregs_D6
  81.         ULONG    sregs_D7
  82.         ULONG    sregs_A0
  83.         ULONG    sregs_A1
  84.         ULONG    sregs_A2
  85.         ULONG    sregs_A3
  86.         ULONG    sregs_A4
  87.         ULONG    sregs_A5
  88.         ULONG    sregs_A6
  89.         ULONG    sregs_A7
  90.         ULONG    sregs_I0
  91.         ULONG    sregs_I1
  92.         ULONG    sregs_I2
  93.         ULONG    sregs_I3
  94.         ULONG    sregs_I4
  95.         ULONG    sregs_I5
  96.         ULONG    sregs_I6
  97.         ULONG    sregs_I7
  98.         LABEL    sregs_SIZEOF
  99.  
  100. ;--------------    this is the message sent by SnoopyDebug()
  101.         STRUCTURE SnoopyUserMessage,20 ; MN_SIZE
  102.         WORD    sumsg_Type
  103.         APTR    sumsg_Task
  104.         APTR    sumsg_Template
  105.         STRUCT    sumsg_RegsBeforeCall,sregs_SIZEOF
  106.         STRUCT    sumsg_RegsAfterCall,sregs_SIZEOF
  107.         LABEL    sumsg_SIZEOF
  108.  
  109. ;--------------    this bit must be set in sumsg_Type, else Snoopy is likely to crash
  110.         BITDEF    MSGTYPE,DEBUG,4
  111.  
  112. ;--------------    this is the main macro. It is called like this :
  113. ;--------------    
  114. ;--------------        SNOOPY <function>,<template>
  115. ;--------------    
  116. ;--------------    [if <template> is #0, all registers will be shown]. Example :
  117. ;--------------    
  118. ;--------------        SNOOPY #Test,#0
  119. ;--------------        SNOOPY #Test,#TestTemplate
  120. SNOOPY        MACRO
  121.         move.l    \2,-(sp)
  122.         move.l    \1,-(sp)
  123.         jsr    SnoopyDebug
  124.         ENDM
  125.  
  126.  
  127. ;--------------    additional flags
  128.         BITDEF    REG,RESULT,6    ; return value
  129.         BITDEF    REG,BOOLEAN,7    ; boolean style output
  130.         BITDEF    REG,BYTE,8    ; size = byte
  131.         BITDEF    REG,WORD,9    ; size = word
  132.         BITDEF    REG,LONG,10    ; size = long
  133.  
  134. ;--------------    the register values
  135. REGISTER_D0    equ    %001000
  136. REGISTER_D1    equ    %001001
  137. REGISTER_D2    equ    %001010
  138. REGISTER_D3    equ    %001011
  139. REGISTER_D4    equ    %001100
  140. REGISTER_D5    equ    %001101
  141. REGISTER_D6    equ    %001110
  142. REGISTER_D7    equ    %001111
  143. REGISTER_A0    equ    %010000
  144. REGISTER_A1    equ    %010001
  145. REGISTER_A2    equ    %010010
  146. REGISTER_A3    equ    %010011
  147. REGISTER_A4    equ    %010100
  148. REGISTER_A5    equ    %010101
  149. REGISTER_A6    equ    %010110
  150. REGISTER_A7    equ    %010111
  151. REGISTER_I0    equ    %100000
  152. REGISTER_I1    equ    %100001
  153. REGISTER_I2    equ    %100010
  154. REGISTER_I3    equ    %100011
  155. REGISTER_I4    equ    %100100
  156. REGISTER_I5    equ    %100101
  157. REGISTER_I6    equ    %100110
  158. REGISTER_I7    equ    %100111
  159. REGISTER_DONE    equ    -1
  160.  
  161.         ENDC    ;SNOOPYDEBUG_I
  162. ;--------------    
  163.